/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package game;

import java.util.Arrays;

/**
 *
 * @author Administrator
 */
public class ChangeText {
    
           private static final int MAX = 30; // So ky tu toi da cua "Answers"
           
           
           // Cac mang ky tu phuc vu cho kiem tra loi chinh ta va chuyen tu co dau sang khong dau
           
           private char[] WRONG_CHARACTERS = {'!', '"', '#', '$', '%', '&', '\'',
                        '(', ')', '*', '+', ',', '-', '.', '/', '0','1', '2', '3', '4',
                        '5', '6', '7', '8', '9', ':', ';', '<', '=', '>', '?', '@', 
                        '[', '\\', ']', '^', '_', '`', '{', '|', '}', '~'};
                   
           private char[] SPECIAL_CHARACTERS = { ' '
                        ,'À', 'Á', 'Â', 'Ã', 'È', 'É', 'Ê', 'Ì', 'Í', 'Ò',
                        'Ó', 'Ô', 'Õ', 'Ù', 'Ú', 'Ý', 'à', 'á', 'â', 'ã', 'è', 'é', 'ê',
                        'ì', 'í', 'ò', 'ó', 'ô', 'õ', 'ù', 'ú', 'ý', 'Ă', 'ă', 'Đ', 'đ',
                        'Ĩ', 'ĩ', 'Ũ', 'ũ', 'Ơ', 'ơ', 'Ư', 'ư', 'Ạ', 'ạ', 'Ả', 'ả', 'Ấ',
                        'ấ', 'Ầ', 'ầ', 'Ẩ', 'ẩ', 'Ẫ', 'ẫ', 'Ậ', 'ậ', 'Ắ', 'ắ', 'Ằ', 'ằ',
                        'Ẳ', 'ẳ', 'Ẵ', 'ẵ', 'Ặ', 'ặ', 'Ẹ', 'ẹ', 'Ẻ', 'ẻ', 'Ẽ', 'ẽ', 'Ế',
                        'ế', 'Ề', 'ề', 'Ể', 'ể', 'Ễ', 'ễ', 'Ệ', 'ệ', 'Ỉ', 'ỉ', 'Ị', 'ị',
                        'Ọ', 'ọ', 'Ỏ', 'ỏ', 'Ố', 'ố', 'Ồ', 'ồ', 'Ổ', 'ổ', 'Ỗ', 'ỗ', 'Ộ',
                        'ộ', 'Ớ', 'ớ', 'Ờ', 'ờ', 'Ở', 'ở', 'Ỡ', 'ỡ', 'Ợ', 'ợ', 'Ụ', 'ụ',
                        'Ủ', 'ủ', 'Ứ', 'ứ', 'Ừ', 'ừ', 'Ử', 'ử', 'Ữ', 'ữ', 'Ự', 'ự', };
            
            private char[] REPLACEMENTS = { '\0','A', 'A', 'Â', 'A', 'E', 'E', 'Ê',
                        'I', 'I', 'O', 'O', 'Ô', 'O', 'U', 'U', 'Y', 'a', 'a', 'â', 'a',
                        'e', 'e', 'ê', 'i', 'i', 'o', 'o', 'ô', 'o', 'u', 'u', 'y', 'Ă',
                        'ă', 'Đ', 'đ', 'I', 'i', 'U', 'u', 'Ơ', 'ơ', 'Ư', 'ư', 'A', 'a',
                        'A', 'a', 'Â', 'â', 'Â', 'â', 'Â', 'â', 'Â', 'â', 'Ă', 'ă', 'Ă',
                        'ă', 'Ă', 'ă', 'Ă', 'ă', 'Ă', 'ă', 'Ă', 'ă', 'E', 'e', 'E', 'e',
                        'E', 'e', 'Ê', 'ê', 'Ê', 'ê', 'Ê', 'ê', 'Ê', 'ê', 'Ê', 'ê', 'I',
                        'i', 'I', 'i', 'O', 'o', 'O', 'o', 'Ô', 'ô', 'Ô', 'ô', 'Ô', 'ô',
                        'Ô', 'ô', 'Ô', 'ô', 'Ơ', 'ơ', 'Ơ', 'ơ', 'Ơ', 'ơ', 'Ơ', 'ơ', 'Ơ',
                        'ơ', 'U', 'u', 'U', 'u', 'Ư', 'ư', 'Ư', 'ư', 'Ư', 'ư', 'Ư', 'ư',
                        'Ư', 'ư', };
           
        
            /**
             * 
             * @param s Chuỗi String
             * @return  <p>Trả về true nếu chuỗi hợp lễ</p>
             * <p>Trả về false nếu chuỗi không hợp lệ<p>
             */
         public boolean checkText(String s){
                
                for(int i = 0; i < s.length(); i++){
                    
                    int index = Arrays.binarySearch(WRONG_CHARACTERS, s.charAt(i));
                    if(index >= 0) return false;
                }
                return true;
            }           

         /**
          * 
          * @param s Chuỗi đáp án chưa chỉnh sửa
          * @return Đáp án bị cắt dấu space và chuyển thành chữ hoa
          */
        public  String toAnswers(String s){
               
                return s.replaceAll("\\s+", " ").toUpperCase();
           }
           
        /**
         * 
         * @param ch Ký tự
         * @return Ký tự không dấu
         */
        public char removeAccent(char ch) {
                int index = Arrays.binarySearch(SPECIAL_CHARACTERS, ch);
                if (index >= 0) {
                        ch = REPLACEMENTS[index];
                }
                return ch;
        }
        
        /**
         * 
         * @param s Chuỗi đáp án có dấu
         * @return Đáp án không dấu 
         */
        public String removeAccent(String s) {
            
                int maxLength = Math.min(s.length(), MAX);
                char[] buffer = new char[maxLength];
                int n = 0;
                for (int i = 0; i < maxLength; i++) {
                    
                        char ch = s.charAt(i);
                        buffer[n] = removeAccent(ch);
                        if (buffer[n] > 31) {
                                n++;
                        }
                }
                return String.valueOf(buffer, 0, n).toUpperCase();
        } 
}
